#pragma once
#include<exception>
#include<iostream>
#include<string>

class UIException : public std::exception
{
public:
//=====================================
// Constructors, Destructor, Operators
//=====================================
	UIException();
	UIException(int code);
	UIException(const char* msg);
	UIException(const char* msg, int code);
	UIException(const char* msg, const char* in_file, const char* in_class, const char* in_method);
	UIException(const char* msg, const char* in_file, const char* in_class, const char* in_method, int code);
	UIException(const UIException& e);
//=====================================
// Functionality
//=====================================

	virtual const char* what();
//=====================================
// Setters
//=====================================

	void setFile(const char* in_file);
	void setClass(const char* in_class);
	void setFunction(const char* in_function);
private:

	int code_;
	std::string msg_;
	std::string file_;
	std::string class_;
	std::string function_;
	std::string text_;
};